/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ventanaFacade;

import dao.AbstractFacade;
import java.awt.Component;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPasswordField;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 *
 * @author carlos
 */
public class FacadeForm 
{
    private JButton nuevo;
    private JButton editar;
    private JButton eliminar;
    private JButton grabar;
    private JButton cancelar;
    private JTable tabla;
    private int estado; //0=nada,1=nuevo,2=editar
    
    private ModeloTabla modeloTabla;
    private AbstractFacade facade;
    private InterfazFacadeForm interfaz;
    
    private Vector<Component> campos;
    
    private String tipoKeyPrimary;//para saber si es es normal o incremental
    private JTextField txtKeyPrimary;
         
    public FacadeForm(JButton nuevo, JButton editar, JButton eliminar, JButton grabar, JButton cancelar,JTable tabla,AbstractFacade facade,InterfazFacadeForm interfaz) {
        this.nuevo = nuevo;
        this.editar = editar;
        this.eliminar = eliminar;
        this.grabar = grabar;
        this.cancelar = cancelar;
        this.tabla=tabla;
        this.facade=facade;
        this.modeloTabla=new ModeloTabla(facade);
        this.tabla.setModel(modeloTabla);
        this.interfaz=interfaz;
        
        campos=new Vector<Component>();
        estado=0;
        tipoKeyPrimary="normal";
        iniciarComponentes();
        
    }
    
    public void insertarKeyPrimary(JTextField campo,String tipo)
    {
        txtKeyPrimary=campo;
        txtKeyPrimary.setEnabled(false);
        tipoKeyPrimary=tipo;
    }
    
    public void insertarCampo(Component c)
    {
                
        c.setEnabled(false);
        campos.add(c);
    }
    
       
    private void habilitarComponentes(Boolean opcion)
    {
        for (Iterator<Component> it = campos.iterator(); it.hasNext();) {
            Component component = it.next();
            component.setEnabled(opcion);
            
        }
    }
    
    public void iniciarComponentes()
    {
        nuevo.setEnabled(true);
        editar.setEnabled(true);
        eliminar.setEnabled(true);
        grabar.setEnabled(false);
        cancelar.setEnabled(false);
        habilitarComponentes(false);
    }
    
    public void nuevo()
    {
        if(tipoKeyPrimary.equals("normal"))
        {
            txtKeyPrimary.setEnabled(true);
        }
        
         
        nuevo.setEnabled(false);
        editar.setEnabled(false);
        eliminar.setEnabled(false);
        grabar.setEnabled(true);
        cancelar.setEnabled(true);
        estado=1;
        habilitarComponentes(true);
        limpiar();
    }
    
    
    public void editar()
    {
                      
        nuevo.setEnabled(false);
        editar.setEnabled(false);
        eliminar.setEnabled(false);
        grabar.setEnabled(true);
        cancelar.setEnabled(true);
        estado=2;
        habilitarComponentes(true);
        interfaz.traspasarValores();
        tabla.setEnabled(false);
    }
    
    public void limpiar()
    {
         txtKeyPrimary.setText("");
        
        for (Iterator<Component> it = campos.iterator(); it.hasNext();) 
        {
            Component component = it.next();
             if(component instanceof JTextField)
            {
                JTextField obj=(JTextField) component;
                obj.setText("");
            }
            
            if(component instanceof JComboBox)
            {
                JComboBox obj=(JComboBox) component;
                obj.setSelectedIndex(0);
            }
            
            if(component instanceof JTextArea)
            {
                 JTextArea obj=(JTextArea) component;
                 obj.setText("");
            }
            
            if(component instanceof JPasswordField )
            {
                 JPasswordField obj=(JPasswordField) component;
                 obj.setText("");
            }        
        }
    }
    
    public void guardar()
    {
        if(estado==1)
            facade.grabar(interfaz.nuevoObjeto());            
        if(estado==2)
            facade.editar(interfaz.editarObjeto());
        
              
        estado=0;//vuelve al estado inicial
        iniciarComponentes();
        tabla.setEnabled(true);
        modeloTabla.cargarDatos();
        txtKeyPrimary.setEnabled(false);
    }
    
    public void eliminar()
    {
        String codigo=modeloTabla.getValueAt(tabla.getSelectedRow(),0).toString();
        //interfaz.traspasarValores();
        facade.eliminar(codigo);
        estado=0;//vuelve al estado inicial
        iniciarComponentes();
        tabla.setEnabled(true);
        modeloTabla.cargarDatos();
        txtKeyPrimary.setEnabled(false);
        //limpiar();
    }
    
    public void cancelar()
    {
        iniciarComponentes();
        tabla.setEnabled(true);
        txtKeyPrimary.setEnabled(false);
    }
    
    public Object getObj(int index)
    {
        return modeloTabla.getObj(index);
    }
    
    public void buscar(String texto)
    {
        if(texto.equals(""))
        {
            modeloTabla.cargarDatos();
        }
        else
        {
            modeloTabla.filtroDatos(texto);
        }
        
    }
    
}
